Gunakan atau tombol di bawah untuk navigasi
Chapter 11 • Security & Business
🔐
🪪
🛡️
🔑
👤
⚙️

Authentication &
Business Application

Belajar bagaimana aplikasi mengenali siapa kamu, menentukan apa hakmu, dan menjaga data tetap aman — dari Login hingga Mini Project School Management System.

Authentication Authorization Security Laravel Dashboard
Chapter 11 • Peta Bab

Peta Perjalanan BAB 11

Sembilan topik utama yang akan membawamu dari konsep keamanan dasar hingga membangun aplikasi bisnis nyata.

🆔 Authentication vs Authorization
🎟️ Session, Cookie & Token
⚙️ Laravel Authentication
🛡️ Middleware
👥 User Management
🔑 Role & Permission
🔒 Security Fundamental
📋 CRUD Profesional
📊 Dashboard Analytics
🎯 Tujuan Akhir

Di akhir bab, kamu akan membangun School Management System — sistem login multi-role lengkap dengan dashboard dan CRUD data sekolah.

Chapter 11 • Konsep Inti

Authentication vs Authorization

Authentication = "Siapa kamu?"  •  Authorization = "Apa yang boleh kamu lakukan?"

🪪

Authentication (Autentikasi)

Proses membuktikan identitas. Sistem memastikan kamu benar-benar orang yang kamu klaim — biasanya lewat email + password.

LoginVerifikasi identitas
🚪

Authorization (Otorisasi)

Setelah dikenali, sistem menentukan hak akses. Apakah kamu boleh masuk halaman admin? Boleh hapus data?

RolePermission
LANGKAH 1

🪪 Authentication

"Siapa kamu?" — satpam memindai KTP-mu
🧍 🪪
✓ Dikenali: "Andi" — silakan masuk
LANGKAH 2

🚪 Authorization

"Apa hakmu?" — pintu mana yang boleh dibuka
🏬 Lantai 1 — Umum✓ Boleh
🖥️ Lantai 2 — Ruang Admin🔒 Ditolak
💰 Brankas Sekolah🔒 Ditolak
🏢 Analogi Kehidupan: Masuk Gedung Sekolah

Langkah 1 — Authentication: di pintu depan, satpam memindai KTP-mu untuk memastikan kamu benar "Andi", bukan orang lain. Itu membuktikan siapa kamu.
Langkah 2 — Authorization: meski sudah dikenali, KTP-mu hanya bisa membuka Lantai 1. Ruang Admin & Brankas tetap terkunci karena kamu bukan admin. Itu menentukan apa hakmu.
👉 Intinya: dikenali dulu (Authentication), baru ditentukan boleh apa saja (Authorization).

Chapter 11 • Cara Sistem "Mengingat"

Session, Cookie & Token

HTTP itu "pelupa" — setiap request dianggap orang baru. Tiga benda ini membuat sistem ingat siapa kamu setelah login.

🎟️

Session

Data identitasmu disimpan di server. Browser hanya pegang ID-nya.

🏷️

Cookie

Sepotong data kecil disimpan di browser, dikirim otomatis tiap request.

🪙

Token (JWT)

"KTP digital" berisi info terenkripsi, dikirim di header request.

🎵 Analogi Konser Musik

Session = gelang tangan event (panitia pegang daftar). Cookie = stiker nama di baju (selalu menempel). Token = e-ticket QR di HP (berisi data lengkap, tinggal scan). Ketiganya membuktikan "aku sudah bayar tiket".

Chapter 11 • Alur Logika

Flowchart: Authentication Flow

Bagaimana sistem memproses login dari awal sampai kamu masuk dashboard.

flowchart TD A([User buka halaman]) --> B[Isi Form Login] B --> C{Cek Email & Password
di Database} C -->|Cocok| D[Buat Session / Token] C -->|Salah| E[Tampilkan Error] E --> B D --> F[Simpan Cookie di Browser] F --> G([Redirect ke Dashboard])
User buka halaman Isi Form Login Cek DB? Buat Session Error Dashboard
🔍 Inti Alur

Kunci utamanya ada di percabangan "Cek Email & Password". Jika cocok → sistem membuat "tanda pengenal" (session/token). Jika salah → kembali ke form dengan pesan error.

Chapter 11 • Laravel Authentication

Register & Login di Laravel

Controller yang menangani pendaftaran user baru dan proses login. Perhatikan: password selalu di-hash, tidak pernah disimpan apa adanya.

AuthController.php — register()
public function register(Request $req){
  $data = $req->validate([
    'name'     => 'required|min:3',
    'email'    => 'required|email|unique:users',
    'password' => 'required|min:8|confirmed',
  ]);

  $user = User::create([
    'name'     => $data['name'],
    'email'    => $data['email'],
    // password DI-HASH dulu!
    'password' => Hash::make($data['password']),
  ]);

  return redirect('/login');
}
AuthController.php — login()
public function login(Request $req){
  $cred = $req->validate([
    'email'    => 'required|email',
    'password' => 'required',
  ]);

  // Auth::attempt cek & cocokkan hash
  if(Auth::attempt($cred)){
    $req->session()->regenerate();
    return redirect('/dashboard');
  }

  return back()->withErrors([
    'email' => 'Email atau password salah.',
  ]);
}
💡 Catatan Penting

Auth::attempt() otomatis mengambil hash dari DB lalu membandingkannya dengan password yang diketik. Kamu tidak perlu cek manual — dan password asli tidak pernah tersimpan.

Chapter 11 • Laravel Authentication

Logout, Forgot & Reset Password

Keluar dari sesi, dan memulihkan akun yang lupa password lewat token yang dikirim via email.

AuthController.php
public function logout(Request $req){
  Auth::logout();
  $req->session()->invalidate();
  $req->session()->regenerateToken();
  return redirect('/');
}

// Kirim link reset ke email
public function forgot(Request $req){
  $req->validate(['email'=>'required|email']);
  Password::sendResetLink(
    $req->only('email')
  );
  return back()->with('status','Link terkirim!');
}

🔄 Alur Reset Password

flowchart TD A([Klik Lupa Password]) --> B[Masukkan Email] B --> C[Sistem kirim
Token via Email] C --> D[User klik link
+ token unik] D --> E{Token valid
& belum kadaluarsa?} E -->|Ya| F[Isi Password Baru] E -->|Tidak| G[Token Invalid] F --> H([Login dengan
password baru])
Lupa Password Kirim Token Email Token valid? Password Baru Login Berhasil
📧 Kenapa pakai Token?

Token reset bersifat unik & sementara (kadaluarsa ~60 menit). Ini memastikan hanya pemilik email asli yang bisa mengganti password — bukan orang lain yang menebak.

Chapter 11 • Gerbang Keamanan

Middleware: Penjaga Setiap Pintu

Middleware adalah "petugas" yang memeriksa setiap request sebelum sampai ke controller.

🔓

auth

Wajib sudah login.

👤

guest

Hanya untuk yang belum login.

🎖️

role

Cek peran (admin/staff).

permission

Cek izin spesifik.

💂💂💂 🏃
routes/web.php
Route::middleware(['auth'])->group(function(){
  Route::get('/dashboard', [DashboardC::class,'index']);

  // hanya admin yang boleh
  Route::middleware('role:admin')->group(function(){
    Route::resource('/users', UserController::class);
  });
});
flowchart LR R([Request]) --> M1[auth] M1 --> M2[role:admin] M2 --> M3[permission] M3 --> C([Controller]) M1 -.gagal.-> X[403 / Login] M2 -.gagal.-> X
Req auth role Ctrl gagal → 403 / Login
💂 Analogi Gedung Perkantoran

Bayangkan gedung dengan petugas keamanan di tiap pintu. Pintu 1 cek "sudah login?", pintu 2 cek "kamu admin?", pintu 3 cek "boleh hapus data?". Jika satu pintu menolak, kamu tidak pernah sampai ke ruangan tujuan.

Chapter 11 • User Management

User Management: CRUD User

Create, Read, Update, Delete — empat operasi dasar mengelola data pengguna.

UserController.php
// READ — tampilkan semua user
public function index(){
  $users = User::latest()->paginate(10);
  return view('users.index', compact('users'));
}

// CREATE — simpan user baru
public function store(Request $r){
  User::create($r->validate([
    'name'=>'required', 'email'=>'required|email|unique:users',
  ]));
  return to_route('users.index');
}

// DELETE — hapus user
public function destroy(User $user){
  $user->delete();
  return back();
}

📋 Daftar User

NamaEmailRoleStatus
Andi Saputraandi@sekolah.idAdmin● Aktif
Bunga Lestaribunga@sekolah.idGuru● Aktif
Citra Dewicitra@sekolah.idGuru● Nonaktif
Dimas Pratamadimas@sekolah.idSiswa● Aktif
🗂️ Analogi Buku Absensi

CRUD itu seperti mengelola buku absensi: menambah nama siswa baru (Create), membaca daftar (Read), mengoreksi data salah (Update), dan mencoret yang pindah sekolah (Delete).

Chapter 11 • Otorisasi

Role & Permission Management

Role = jabatan. Permission = izin spesifik. Semakin tinggi role, semakin banyak izin.

👑 Admin
🧑‍💼 Manager
🧑‍🏫 Staff / Guru
👤 Guest / Siswa

Hierarki Role (berputar 3D)

🔑 Matriks Permission

PermissionAdminGuruSiswa
Lihat Data
Input Nilai
Kelola User
Hapus Data
🏫 Analogi Struktur Sekolah

Kepala Sekolah (Admin) bisa apa saja. Guru bisa input nilai tapi tak bisa mengangkat guru baru. Siswa hanya bisa melihat nilainya sendiri. Itulah Role & Permission.

Chapter 11 • Security Fundamental

Password Hashing

Hashing mengubah password menjadi kode acak satu arah — tidak bisa dikembalikan ke aslinya.

rahasia123
⚙️
$2y$10$N9qo8uLOickgx2ZMRZo...HfQ
hashing.php
// Membuat hash saat register
$hash = Hash::make('rahasia123');
// => $2y$10$N9qo8uLOickgx2ZMRZ...

// Mengecek saat login (TIDAK di-decrypt!)
if(Hash::check('rahasia123', $hash)){
  // cocok → boleh login
}

🔐 Kenapa Satu Arah?

Jika database bocor, hacker hanya mendapat hash acak — bukan password asli. Bahkan admin tidak bisa "membaca" password user. Saat login, sistem mem-hash ulang input lalu membandingkan, bukan men-decrypt.

☕ Analogi Membuat Kopi

Menggiling biji kopi jadi bubuk itu mudah, tapi mengubah bubuk kembali jadi biji utuh itu mustahil. Hashing sama: password → hash itu satu arah, tidak bisa "dimentahkan" lagi.

Chapter 11 • Security Fundamental

CSRF, Validation & XSS

Tiga ancaman umum dan cara mencegahnya di Laravel.

🎭

CSRF

Cross-Site Request Forgery — penyerang membuat kamu mengirim request tanpa sadar.

Cegah: @csrf token di tiap form.

🧪

Validation

Pastikan data masuk benar & aman sebelum diproses.

Cegah: $req->validate([...])

💉

XSS

Cross-Site Scripting — penyerang menyisipkan script jahat lewat input.

Cegah: escape output {{ $data }}

form.blade.php
<form method="POST" action="/students">
  @csrf                          {{-- Token anti-CSRF --}}
  <input name="nama" required>
</form>

{{-- Output otomatis di-escape → aman dari XSS --}}
<p>{{ $student->nama }}</p>
🏦 Analogi CSRF

Seseorang memalsukan tanda tanganmu lalu mengirim surat ke bank atas namamu. Token CSRF = stempel rahasia yang hanya kamu tahu, jadi pemalsuan ketahuan.

🍱 Analogi XSS

Seseorang menyembunyikan "racun" (script jahat) dalam makanan (input). Escaping = mengubah racun jadi tidak aktif sebelum disajikan ke pengunjung lain.

Chapter 11 • CRUD Profesional

Search & Filter

Menyaring ribuan data agar pengguna cepat menemukan yang dicari.

AndiBudiCiciDediEuis
⬇️ filter: nama mengandung "di" ⬇️
AndiBudiDedi
StudentController.php
public function index(Request $r){
  $query = Student::query();

  // SEARCH berdasarkan nama
  if($r->filled('q')){
    $query->where('nama', 'like', '%'.$r->q.'%');
  }

  // FILTER berdasarkan kelas
  if($r->filled('kelas')){
    $query->where('kelas', $r->kelas);
  }

  return view('students.index', [
    'students' => $query->paginate(10),
  ]);
}
☕ Analogi Saringan Kopi

Search & Filter bekerja seperti saringan kopi: tuang semua data, hanya yang memenuhi kriteria (ampas yang sesuai ukuran) yang lolos ke hasil akhir.

Chapter 11 • CRUD Profesional

Pagination, Sorting & Bulk Action

Mengelola data dalam jumlah besar dengan rapi dan efisien.

📄

Pagination

Pecah data jadi halaman kecil agar ringan dimuat.

↕️

Sorting

Urutkan A–Z, terbaru, atau nilai tertinggi.

☑️

Bulk Action

Pilih banyak baris, lakukan aksi sekaligus.

StudentController.php
// SORTING + PAGINATION
$students = Student::orderBy($r->get('sort','nama'), 'asc')
                    ->paginate(10);

// BULK DELETE — hapus banyak sekaligus
public function bulkDelete(Request $r){
  Student::whereIn('id', $r->ids)->delete();
  return back()->with('ok', count($r->ids).' data dihapus');
}
« Prev 123 10 Next »
📚 Analogi Buku Tebal

Pagination seperti membagi buku 1000 halaman jadi bab-bab. Kamu tak perlu baca semua sekaligus — cukup buka halaman yang dibutuhkan.

Chapter 11 • Dashboard Analytics

Statistic Cards

Kartu ringkasan yang menampilkan angka penting secara cepat dan visual.

0
👥 Total User
0
🎖️ Total Role
0
🟢 Active Session
0
🔑 Login Hari Ini
📊 Kenapa Penting?

Statistic card adalah "dashboard mobil" dari aplikasi — sekali lihat, admin langsung tahu kondisi sistem tanpa membaca data mentah satu per satu. Angka berhitung dari 0 untuk menarik perhatian.

Chapter 11 • Dashboard Analytics

Chart & Recent Activity

Visualisasi tren dan riwayat aktivitas terbaru pengguna.

📈 Login per Hari

Sen
Sel
Rab
Kam
Jum
Sab

🍩 Distribusi Role

Admin
Guru
Siswa

🔔 Aktivitas Terbaru

Andi Saputra login • 2 menit lalu
📝
Bunga Lestari menambah nilai Matematika • 15 menit lalu
🗑️
Admin menghapus 1 user nonaktif • 1 jam lalu
Chapter 11 • Dashboard Analytics

Notification System

Memberi tahu pengguna tentang kejadian penting secara real-time.

🔔3

Lonceng Notifikasi

Badge merah menandakan ada 3 notifikasi belum dibaca. Lonceng bergetar menarik perhatian.

🆕
Pendaftaran siswa baru menunggu verifikasi
⚠️
3 percobaan login gagal terdeteksi
📊
Laporan bulanan siap diunduh
NotificationController.php
public function index(){
  $notif = auth()->user()->unreadNotifications();
  return response()->json([
    'count' => $notif->count(),   // badge counter
    'items' => $notif->take(5),
  ]);
}
📬 Analogi Kotak Surat

Notifikasi seperti kotak surat dengan bendera merah: saat bendera naik (badge muncul), kamu tahu ada pesan baru tanpa harus membuka kotaknya dulu.

Chapter 11 • Mini Project

School Management System

Menggabungkan semua yang dipelajari menjadi satu aplikasi nyata.

🔐

Modul Login

Authentication + reset password.

🎭

Multi-Role

Admin, Guru, Siswa.

📊

Dashboard

Statistik per peran.

📋

CRUD Data

Siswa, Guru, Nilai.

📈

Reporting

Laporan nilai & absensi.

🛡️

Security

Hashing, CSRF, validasi.

🏗️ Arsitektur MVC

flowchart LR U([User]) --> V[View / Blade] V --> CO[Controller] CO --> MO[Model] MO --> DB[(Database)] DB --> MO --> CO --> V
User View Controller Model DB
Chapter 11 • Mini Project

Database Schema & Role Redirect

Struktur tabel dan bagaimana sistem mengarahkan user sesuai perannya setelah login.

🗃️ ERD Sederhana

flowchart TD U[User] --> R[Role] U --> ST[Student] U --> T[Teacher] T --> SU[Subject] ST --> G[Grade] SU --> G
User Student Teacher Subject Grade

🚦 Redirect Berdasarkan Role

flowchart TD L([Login Sukses]) --> C{Role?} C -->|Admin| A[/Dashboard Admin/] C -->|Guru| G[/Dashboard Guru/] C -->|Siswa| S[/Dashboard Siswa/]
Login Sukses Role? Admin Guru Siswa
🚦 Inti Redirect

Setelah login sukses, sistem mengecek role lalu mengarahkan ke dashboard yang sesuai — seperti petugas bandara mengarahkan penumpang ke gate berbeda sesuai tiketnya.

Chapter 11 • Recap

Ringkasan BAB 11

Semua yang sudah kamu kuasai dalam satu pandangan.

🔑 Konsep Inti

  • Authentication membuktikan siapa kamu; Authorization menentukan hakmu.
  • Session/Cookie/Token membuat sistem mengingat identitasmu.
  • Middleware menjaga tiap pintu request.

🛡️ Keamanan & Bisnis

  • Hashing melindungi password satu arah.
  • CSRF, Validation, XSS menutup celah serangan.
  • CRUD Pro & Dashboard membangun aplikasi siap pakai.
🚀 Motivasi

Kamu kini paham fondasi bagaimana setiap aplikasi nyata (Gojek, Tokopedia, e-learning sekolah) menjaga akun jutaan penggunanya. Lanjutkan ke 3 tugas untuk membuktikan kemampuanmu!

🎓
Chapter 11 • Tugas 1 dari 3

Tugas 1: Authentication Implementation

Bangun sistem login & register sederhana lengkap dengan keamanan dasar.

📌 Instruksi

  • Buat form Register (nama, email, password + konfirmasi).
  • Buat form Login dan Logout.
  • Pastikan password disimpan dalam bentuk hash.
  • Tambahkan validasi dan token @csrf pada form.

🎯 Contoh Output

User mendaftar → diarahkan ke login → masuk dashboard yang menyapa "Halo, [Nama]" → bisa logout. Saat password salah, muncul pesan error yang jelas.

⏱️ 3 hari 👤 Individu 💯 100 poin
KriteriaBobotIndikator
Register & Login berfungsi40%Bisa daftar, login, logout tanpa error
Password di-hash30%DB menyimpan hash, bukan teks asli
Validasi & CSRF20%Form tervalidasi & ada @csrf
Tampilan rapi10%UI bersih & mudah dipakai
Chapter 11 • Tugas 2 dari 3

Tugas 2: Role & Permission System

Kembangkan sistem login agar mendukung banyak peran dengan hak akses berbeda.

📌 Instruksi

  • Tambahkan kolom role (admin, guru, siswa) pada user.
  • Buat middleware role untuk membatasi akses halaman.
  • Admin bisa kelola user; Guru & Siswa tidak.
  • Setelah login, redirect ke dashboard sesuai role.

🎯 Contoh Output

Login sebagai admin → masuk Dashboard Admin dengan menu "Kelola User". Login sebagai siswa → masuk Dashboard Siswa tanpa menu tersebut. Akses paksa halaman admin oleh siswa → ditolak (403).

⏱️ 5 hari 👤 Individu 💯 100 poin
KriteriaBobotIndikator
Multi-role berfungsi35%3 role bisa login & dibedakan
Middleware role35%Akses tidak sah ditolak (403)
Redirect sesuai role20%Tiap role ke dashboard yang benar
Dokumentasi10%README menjelaskan cara pakai
Chapter 11 • Tugas 3 dari 3 • Final

Tugas 3: Mini Project School Management

Proyek akhir — gabungkan seluruh materi BAB 11 menjadi satu sistem utuh.

📌 Fitur Wajib

  • Login multi-role (Admin, Guru, Siswa) + reset password.
  • Dashboard dengan statistic card & chart.
  • CRUD data Siswa, Guru, dan Nilai (Search, Filter, Pagination).
  • Reporting: laporan nilai per siswa.
  • Terapkan security: hashing, validasi, CSRF.

🎯 Output & Pengumpulan

Aplikasi web fungsional + video demo 3–5 menit + source code di GitHub dengan README. Presentasikan alur dari login hingga laporan.

⏱️ 2 minggu 👥 Kelompok (2-3) 💯 200 poin
KriteriaBobotIndikator
Authentication & Role25%Login multi-role aman berfungsi
CRUD Profesional30%Search, filter, pagination jalan
Dashboard & Reporting25%Chart & laporan akurat
Security10%Hashing, CSRF, validasi diterapkan
Presentasi & Dokumentasi10%Demo jelas & README lengkap
🎉 Selamat! Kamu telah menyelesaikan BAB 11